#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//堆中创建结构体变量
struct student
{
    char name[20];
    int age;
};

struct man
{
    char *name;
    int age;
};


int main()
{
    struct student st;//st.name在栈里面
    struct student *p = malloc(sizeof(struct student));
    //指针变量p是在栈里面
    //p->name == (*p).name指针变量指向的变量name在堆里面
    //p->age == (*p).age 也在堆里面
    free(p);

    struct man *p1 = malloc(sizeof(struct man));
    //指针变量p1是在栈里面
    //申请了一个堆空间,p1->name在堆里面，
    //char *类型的name是个野指针
    //char *name 也需要分配一个堆空间
    p1->name = malloc(20);
    strcpy(p1->name, "王旭");
    p1->age = 32;
    printf("p1->name = %s, p1->age = %d", p1->name, p1->age);
    free(p1->name);//需要先free(p1->name)
    free(p1);
    return 0;
}

